package com.iwhalecloud.citybrain.flow.platform.manager.application.service;

import java.util.List;

import com.iwhalecloud.citybrain.flow.platform.manager.common.ResponseResult;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.NodeParticipantSetting;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.SimpleCompleteTaskResult;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.SimpleMyApplyList;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.SimpleMyApplyQuery;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.SimpleStartProcessSetting;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.SimpleTaskList;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.SimpleTaskQuery;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.model.ModelSimpleVo;
import com.iwhalecloud.citybrain.flow.platform.manager.domain.model.task.TaskHandleVo;

/**
 * @author lilh
 * @date 2021/1/6 下午1:49
 */
public interface FlowSimpleService {

    /**
     * 获取已部署模型列表
     *
     * @return 已部署模型列表
     */
    ResponseResult<List<ModelSimpleVo>> listModel();

    /**
     * 设置节点处理人
     *
     * @param nodeParticipantSetting 节点-处理人信息
     * @return 是否成功
     */
    ResponseResult<Boolean> setNodeParticipant(NodeParticipantSetting nodeParticipantSetting);

    /**
     * 发起申请
     *
     * @param startProcessSetting 发起申请参数
     * @return 发起申请后生成的流程实例
     */
    ResponseResult<String> startProcessInstance(SimpleStartProcessSetting startProcessSetting);

    /**
     * 查询待办和已办列表
     *
     * @param simpleTaskQuery 查询条件
     * @return 任务列表
     */
    ResponseResult<List<SimpleTaskList>> queryTask(SimpleTaskQuery simpleTaskQuery);

    /**
     * 查询我的申请列表
     *
     * @param myApplyQuery 查询条件
     * @return 我的申请列表
     */
    ResponseResult<List<SimpleMyApplyList>> queryMyApply(SimpleMyApplyQuery myApplyQuery);


    /**
     * 终止流程
     *
     * @param processInstanceId 流程实例id
     * @return 结果
     */
    ResponseResult<Boolean> terminateProcessInstance(String processInstanceId);

    /**
     * 完成任务
     *
     * @param taskHandleVo 任务信息
     * @return 是否成功
     */
    ResponseResult<SimpleCompleteTaskResult> completeTask(TaskHandleVo taskHandleVo);

}
